package edu.nf.utils;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
 * 数据行转换处理
 */
public class RowProcessor {

    /**
     * 将结果集转换成实体
     * @param rs
     * @param type
     * @param <T>
     * @return
     */
    public static  <T> T toBean(ResultSet rs ,Class<T> type){
        return BeanUtil.createBean(rs , type);
    }


    /**
     * 将结果集中的一行数据转换成数组
     * @param rs
     * @return
     */
    public static Object[] toArray(ResultSet rs){
        Object[] values = null;
        try {
            ResultSetMetaData md = rs.getMetaData();
            int len = md.getColumnCount();
            values = new Object[len];
            for (int i = 0; i < len; i++) {
                values[i] = rs.getObject(i+1);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return values;
    }

    /**
     * 将结果集封装成一个map集合
     * @param rs
     * @return
     */
    public static Map<String , Object> toMap(ResultSet rs){
        Map<String , Object> map = new HashMap<String , Object>();
        try {
            ResultSetMetaData md = rs.getMetaData();
            for (int i = 1; i <=md.getColumnCount() ; i++) {
                map.put(md.getColumnLabel(i),rs.getObject(i));
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return map;
    }

    /**
     * 将结果集中的列封装成java数据类型的值
     * @param rs
     * @param index
     * @param <T>
     * @return
     */
    public static <T> T toColumn(ResultSet rs , int index ,Class<T> clazz){
        T t = null;
        try {

            ResultSetMetaData md = rs.getMetaData();
            String columnName = md.getColumnLabel(index);
            t = (T)ColumnUtil.columnConvert(columnName,rs,clazz);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return t;
    }
}
